home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Tools / Languages / MacGambit 2.0 / sources2 / Thomas / Thomas.README < prev   
Encoding:
Text File  |  1993-02-05  |  9.7 KB  |  120 lines  |  [TEXT/gamI]

  1. he Thomas system was built with no direct input, aid,
  2. assistance or discussion with Apple.  All design and implementation
  3. decisions in Thomas reflect choices by the Thomas implementors based on
  4. reading the book published by Apple.  These decisions must not be
  5. construed in any way as deriving from Apple Computer Corporation or its
  6. employees.
  7.  
  8.  
  9. KNOWN PROBLEMS IN THOMAS
  10. ------------------------
  11.  
  12. I. Known differences from the book "Dylan(TM) an object-oriented
  13.    dynamic language" by Apple Computer Eastern Research and
  14.    Technology, April 1992.
  15.  
  16. 1) In order to use Scheme's READ to handle Thomas expressions, Thomas
  17.    uses !key and !rest wherever the Dylan(TM) book uses #key or #rest.
  18.  
  19. 2) Thomas variable names are restricted to the subset of Scheme names
  20.    that don't start with "!" or "dylan:".  This avoids name clashes
  21.    between user variable names and compiler-generated variables.
  22.  
  23. 3) Thomas doesn't remember the initial case of symbols, since it
  24.    inherits the case from the underlying Scheme system.  Thus some
  25.    implementations of Thomas store symbols in upper case, some in
  26.    lower case, and some preserve case.  All implementations are
  27.    otherwise case-insensitive for symbols, keywords and variable
  28.    names.
  29.  
  30. 4) Thomas doesn't fully handle sealed classes, abstract classes, or
  31.    read-only module variables.
  32.  
  33. 5) Thomas doesn't support the REMOVE-SLOT operation.  We don't really
  34.    understand the full intent of this operation in a variety of
  35.    circumstances.
  36.  
  37. 6) Thomas doesn't do collection alignment for tables (as specified on
  38.    pages 128 and 129); other collection types should be OK.  Fixing
  39.    this would be a very nice contribution to the Thomas implementation
  40.    (hint, hint).
  41.  
  42. 7) Thomas doesn't do (SETTER DIRECT-SUPERCLASSES).  This is somewhere
  43.    between an oversight (we honestly didn't notice it and it isn't in
  44.    the index) and a pain to write.  Again, help would be appreciated.
  45.  
  46. 8) Thomas doesn't do virtual slots in a way that supports their use as
  47.    "filtered slots" as described on pages 58 and 59.  We find the
  48.    description confusing, and require implementors to allocate an
  49.    object of the supertype to store the "hidden" slot value rather
  50.    than relying on NEXT-METHOD to find the hidden slot in the object
  51.    itself.
  52.  
  53. 9) Some implementations of Scheme do not recognize the same set of literal
  54.    character names as specified in the book.  IEEE Scheme requires the
  55.    character literals #\space and #\newline.  Dylan also specifies
  56.    #\rubout, #\page, #\tab, #\backspace, #\return, and #\linefeed.
  57.  
  58. II. Additions to the Thomas language
  59.  
  60. Thomas provides four methods not mentioned in Dylan(TM):
  61.  
  62.      (display <object>)    derived from Scheme's DISPLAY
  63.      (newline)             derived from Scheme'S NEWLINE
  64.      (print <object>)      same as write-line
  65.      (write-line <object>) NEWLINE, then WRITE <object>
  66.  
  67. The MacGambit version of Thomas includes four additional predefined
  68. methods:
  69.  
  70.      (PP <object>) calls the Scheme pretty printer.  Useful to see the
  71.        Scheme code that was generated for a method.
  72.  
  73.      (SCHEME-VARIABLE <symbol>) returns the value of a Scheme variable
  74.        that is visible from the normal user interaction environment.
  75.        This can be used to access any Scheme object, but results are
  76.        unpredictable unless the object has a type that corresponds to
  77.        one of the non-procedural Thomas types.  Common types that can
  78.        be accessed this way are booleans, symbols, strings, numbers,
  79.        the empty list, as well as vectors or lists composed of these.
  80.  
  81.      (SCHEME-PROCEDURE <symbol>) also returns the value of a Scheme
  82.        variable that is visible from the normal user interaction
  83.        environment.  It assumes (without checking) that it is
  84.        applicable and converts it to a Thomas method.  From within
  85.        Thomas it will appear to take an arbitrary number of arguments,
  86.        but will issue an error if the number supplied doesn't match
  87.        the number expected by the Scheme procedure.
  88.  
  89.      (LOAD <string>) loads a file containing Thomas code.  The file is
  90.        first compiled into a Scheme program, which is then loaded with
  91.        Scheme's predefined load procedure.
  92.  
  93.  
  94. THOMAS 1.1 RELEASE NOTES
  95. ------------------------
  96.  
  97. Thomas version 1.1 contains the following changes from version 1.0:
  98.  
  99. * sorted-applicable-methods now uses a new topological sort that uses a
  100. number we call "class specificity".  Intuitively, class specificity
  101. increases every time a class is specialized to produce a subclass.
  102. Computationally, class specificity is the largest number of subclass links
  103. between <object> and the class.  For example, consider this class
  104. heterarchy:
  105.  
  106.               <object>     specificity = 0
  107.               /  |  \
  108.             <a> <b> <c>    specificity = 1
  109.               \ /   /
  110.               <d>  /       specificity = 2
  111.                 \ /
  112.                 <e>        specificity = 3
  113.  
  114. Thus, during method dispatch on an object of type <d>, Thomas considers
  115. methods specialized by class <d> to be more specific than those specialized
  116. by <a> or <b>, which are in turn more specific than any specialized by
  117. <object>.  Notice that the ordering of methods specialized by <a> and <b>
  118. is not specified.  Methods specialized on <e> or <c> are not applicable
  119. because <d> is not a subclass of either.
  120.